home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / vidhrdw / spy.c < prev    next >
C/C++ Source or Header  |  2000-01-08  |  3KB  |  99 lines

  1. #include "driver.h"
  2. #include "vidhrdw/konamiic.h"
  3.  
  4.  
  5. static int layer_colorbase[3],sprite_colorbase;
  6.  
  7.  
  8. /***************************************************************************
  9.  
  10.   Callbacks for the K052109
  11.  
  12. ***************************************************************************/
  13.  
  14. static void tile_callback(int layer,int bank,int *code,int *color)
  15. {
  16.     tile_info.flags = (*color & 0x20) ? TILE_FLIPX : 0;
  17.     *code |= ((*color & 0x03) << 8) | ((*color & 0x10) << 6) | ((*color & 0x0c) << 9)
  18.             | (bank << 13);
  19.     *color = layer_colorbase[layer] + ((*color & 0xc0) >> 6);
  20. }
  21.  
  22.  
  23. /***************************************************************************
  24.  
  25.   Callbacks for the K051960
  26.  
  27. ***************************************************************************/
  28.  
  29. static void sprite_callback(int *code,int *color,int *priority)
  30. {
  31.     /* bit 4 = priority over layer A (0 = have priority) */
  32.     /* bit 5 = priority over layer B (1 = have priority) */
  33.     *priority = (*color & 0x30) >> 4;
  34.     *color = sprite_colorbase + (*color & 0x0f);
  35. }
  36.  
  37.  
  38. /***************************************************************************
  39.  
  40.     Start the video hardware emulation.
  41.  
  42. ***************************************************************************/
  43.  
  44. int spy_vh_start(void)
  45. {
  46.     layer_colorbase[0] = 48;
  47.     layer_colorbase[1] = 0;
  48.     layer_colorbase[2] = 16;
  49.     sprite_colorbase = 32;
  50.     if (K052109_vh_start(REGION_GFX1,NORMAL_PLANE_ORDER,tile_callback))
  51.     {
  52.         return 1;
  53.     }
  54.     if (K051960_vh_start(REGION_GFX2,NORMAL_PLANE_ORDER,sprite_callback))
  55.     {
  56.         K052109_vh_stop();
  57.         return 1;
  58.     }
  59.  
  60.     return 0;
  61. }
  62.  
  63. void spy_vh_stop(void)
  64. {
  65.     K052109_vh_stop();
  66.     K051960_vh_stop();
  67. }
  68.  
  69.  
  70.  
  71. /***************************************************************************
  72.  
  73.   Display refresh
  74.  
  75. ***************************************************************************/
  76.  
  77. void spy_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh)
  78. {
  79.     K052109_tilemap_update();
  80.  
  81.     palette_init_used_colors();
  82.     K051960_mark_sprites_colors();
  83.     palette_used_colors[16 * layer_colorbase[0]] |= PALETTE_COLOR_VISIBLE;
  84.     if (palette_recalc())
  85.         tilemap_mark_all_pixels_dirty(ALL_TILEMAPS);
  86.  
  87.     tilemap_render(ALL_TILEMAPS);
  88.  
  89.     fillbitmap(bitmap,Machine->pens[16 * layer_colorbase[0]],&Machine->drv->visible_area);
  90.     K051960_sprites_draw(bitmap,1,1);    /* are these used? */
  91.     K052109_tilemap_draw(bitmap,1,0);
  92.     K051960_sprites_draw(bitmap,0,0);
  93.     K052109_tilemap_draw(bitmap,2,0);
  94.     K051960_sprites_draw(bitmap,3,3);    /* are these used? They are supposed to have */
  95.                                         /* priority over layer B but not layer A. */
  96.     K051960_sprites_draw(bitmap,2,2);
  97.     K052109_tilemap_draw(bitmap,0,0);
  98. }
  99.